/* eslint-disable max-lines */
import TauSimpleSelect from '@/components/TauSimpleSelect';
import { DictItemSelect } from '@/components/biz';
import * as BASE from '@/stores/definitions-base';
import { Input, Switch, DatePicker } from '@alifd/next';
import { t } from '@lingui/macro';
import moment from 'moment';
import React from 'react';

const {
  DATETIME_TEXT, // 时间格式化
  DATE_TEXT,
  TIME_TEXT,
  EMPTY_TEXT,
  ENUMS: ENUMSBase,
  FieldsGrid: FieldGridBase,
  TitleGrid,
  column: columnBase,
  toSelectDataSource,
} = BASE;
export { DATETIME_TEXT, DATE_TEXT, EMPTY_TEXT, TIME_TEXT, TitleGrid, toSelectDataSource };

/**
 * @param {*} path        属性path
 * @param {*} props       column属性
 * @returns column定义
 */
export function column(...args) {
  return columnBase(vehicleModel, ...args);
}

/**
 * 显示一组表单字段
 * ```js
 * {
 *   fields: string[],    // 字段名称，可以使用.来指定嵌套对象属性，例如order.busOrder.shift
 *   columns: number,     // 列数，默认为4,最大为12,最小为1
 *   model: object,       // 字段定义数据模型的根对象，默认不指定，仅在使用子对象作为根模型时设置
 *   overrideModel: object, // 重载字段定义数据模型
 *   mode: string,        // 表单模式，默认为edit，可选view
 *   itemLayout: object,  // FormItem布局配置，默认为{}
 * }
 * ```
 *
 * @param {object} param0
 * @returns
 */
export function FieldsGrid(props) {
  return <FieldGridBase model={vehicleModel} {...props} />;
}

//----------------------------------------------------------------------
export const ENUMS = {
  ...ENUMSBase,
  // 状态
  status: {
    0: false,
    1: true,
  },
  modalTitles: {
    check: t`查看`,
    edit: t`修改`,
    create: t`创建`,
  },
  vehicleType: {
    1: '大巴',
    2: '商务车',
    3: '小客车',
  },
};

/**
 * 模型定义:
 * 1. 普通文本仅需要定义label
 * 2. 需要通过枚举转换的值，定义text; 当使用renderer返回组件时，text属性无效，需要通过组件的renderPreview来指定预览时的绘制方式
 * 3. 通用的ui属性需要定制时，定义ui; 特定模式(view, edit, add)下的ui，添加后缀定义为ui_<mode>，例如：ui_view, ui_edit, ui_add, ui_table
 * 4. ui可配置属性包括:
 *    renderer: 内容渲染函数, Form表单中的原型为：(value: any, formData: any, fieldDefinition: any) => ReactNode; Table Column中的原型为: (value: any, columnIndex: number, rowData: any) => ReactNode;
 *    itemProps: 表单Form.Item的属性，可以是对象，或函数({ isPreview: boolean, mode: string, value: any, formData: any, ...otherDefinitions}) => void;
 *    span: Grid Cell占用的列数, 默认为1
 *
 * 【注】获取接口的model定义后，vscode中通过正则替换：^(\s+)"label": "([^']+)"  ===> $1label: t`$2`
 */
export const vehicleModel = {
  driverInfo: {
    label: t`司机信息`,
    companyId: {
      label: t`公司id`,
    },
    auditStatus: {
      label: t`审核状态是否通过`,
    },
    driverStatus: {
      label: t`司机状态 1-启用、0-停用，控制台设置`,
    },
    dutyStatus: {
      label: t`值班状态 1-正常在岗、0-离岗休假，司机可自行设置，离岗后，将不派单给该司机`,
    },
    dutyVehicleId: {
      label: t`值班车辆 正常在岗时，司机可自行选择关联的车辆，也可以后台设置`,
    },
    dateBirth: {
      label: t`出生年月`,
    },
    permanentLand: {
      label: t`常驻地`,
    },
    licenseMainland: {
      label: t`大陆驾驶证信息`,
      licenseNo: {
        label: t`驾驶证号`,
      },
      vechileType: {
        label: t`驾驶车型 选择，大型客车、中型客车、小型客车、大型货车`,
      },
      validityDate: {
        label: t`驾驶证有效期 输入了驾驶证号，就是必填`,
      },
    },
    licenseHK: {
      label: t`香港驾驶证信息`,
      licenseNo: {
        label: t`驾驶证号`,
      },
      vechileType: {
        label: t`驾驶车型 选择，大型客车、中型客车、小型客车、大型货车`,
      },
      validityDate: {
        label: t`驾驶证有效期 输入了驾驶证号，就是必填`,
      },
    },
    internationalLicense: {
      label: t`国际驾照 选择，无（默认）、 大型客车、中型客车、小型客车、大型货车`,
    },
    attachments: [{
      label: t`附件`,
      title: {
        label: t`附件标题`,
      },
      description: {
        label: t`附件说明`,
      },
      binaryId: [{
        label: t`附件id`,
      }],
    }],
    registerTime: {
      label: t`注册时间`,
    },
    hkMobile: {
      label: t`香港电话`,
    },
    number: {
      label: t`身份证号`,
    },
    address: {
      label: t`住址`,
    },
    type: {
      label: t`1商务车司机 2巴士司机`,
    },
    independentAccount: {
      label: t`分账设置信息`,
      period: {
        label: t`分账周期：T+0、T+1、T+2、T+7、T+30(加几值为几，例：T+0 值为0)`,
      },
      suspensionOfDistribution: {
        label: t`暂停分账 true：暂停 false：可分账`,
      },
      settlementOfDriverCharges: {
        label: t`是否委托平台自动结算司机费用`,
      },
      collectionAccountInformation: {
        label: t`收款账户信息`,
        appId: {
          label: t`公众号appId`,
        },
        accountIdentification: {
          label: t`账户标识`,
        },
        name: {
          label: t`名字`,
        },
        type: {
          label: t`分账接收方类型<br/> MERCHANT_ID：商户号<br/> PERSONAL_OPENID：个人openid`,
        },
      },
    },
  },
  company: {
    label: t`公司信息`,
    code: {
      label: t`自动生成，2位注册地区编码+4位数字，香港HK，大陆CN，澳门OM`,
    },
    name: {
      label: t`公司名称`,
      ui: {
        renderer: (v) => <TauSimpleSelect data={rootStore.vehicleStore.companys} value={v} />,
        itemProps: { required: true },
      },
    },
    registerAddr: {
      label: t`注册地区 下拉选择 香港HK，大陆CN，澳门OM`,
    },
    tel: {
      label: t`公司电话`,
    },
    address: {
      label: t`联系地址`,
    },
    independentAccount: {
      label: t`分账设置信息`,
      period: {
        label: t`分账周期：T+0、T+1、T+2、T+7、T+30(加几值为几，例：T+0 值为0)`,
      },
      suspensionOfDistribution: {
        label: t`暂停分账 true：暂停 false：可分账`,
      },
      settlementOfDriverCharges: {
        label: t`是否委托平台自动结算司机费用`,
      },
      collectionAccountInformation: {
        label: t`收款账户信息`,
        appId: {
          label: t`公众号appId`,
        },
        accountIdentification: {
          label: t`账户标识`,
        },
        name: {
          label: t`名字`,
        },
        type: {
          label: t`分账接收方类型<br/> MERCHANT_ID：商户号<br/> PERSONAL_OPENID：个人openid`,
        },
      },
    },
    orgCode: {
      label: t`工商编码`,
    },
    isManual: {
      label: t`是否手工派单`,
    },
    orgDirector: {
      label: t`企业负责人 必填，法人代表等`,
    },
    directorIdType: {
      label: t`负责人证件类型`,
    },
    directorId: {
      label: t`负责人证件号`,
    },
    directorTel: {
      label: t`负责人电话`,
    },
    dateOfIncorporate: {
      label: t`成立日期`,
    },
    status: {
      label: t`公司状态 必填，1 - 启用（默认），0 - 禁用：禁用时，不派单给该公司旗下车辆`,
    },
    bankAccounts: {
      label: t`开户行信息`,
      '{key}': {
        bank: {
          label: t`开户银行 下拉选择`,
        },
        accountName: {
          label: t`账户名称`,
        },
        account: {
          label: t`银行账号`,
        },
      },
    },
    hasSurcharge: {
      label: t`是否设置运营附加费 true:已设置，false：未设置`,
    },
    attachments: [{
      label: t`附件`,
      title: {
        label: t`附件标题`,
      },
      description: {
        label: t`附件说明`,
      },
      binaryId: [{
        label: t`附件id`,
      }],
    }],
    crBy: {
      label: t`创建者`,
    },
    upBy: {
      label: t`最后修改者`,
    },
    crDate: {
      label: t`创建时间`,
    },
    upDate: {
      label: t`最后修收时间`,
    },
    tenantId: {
      label: t`租户ID`,
    },
    id: {
      label: '',
    },
    operating: {
      label: '',
    },
  },
  vehicleTypeName: {
    label: t`车型`,
  },
  brandModelName: {
    label: t`车牌名称`,
  },
  permanentLandName: {
    label: t`车辆常驻地`,
  },
  mainDriverName: {
    label: t`主司机`,
  },
  coDriverNames: {
    label: t`副司机`,
  },
  ccOrderNum: {
    label: t`包车`,
  },
  portNames: {
    label: t`口岸`,
  },
  username: {
    label: t`用户标识`,
  },
  fullname: {
    label: t`用户名称`,
  },
  phone: {
    label: t`该司机的手机号`,
  },
  isService: {
    label: t`是否正在服务中`,
  },
  isConnect: {
    label: t`是否存在值班车辆是该车的司机用户`,
  },
  code: {
    label: t`车辆编号 自动生成，公司编码+四位数字`,
  },
  companyId: {
    label: t`公司名称`,
    ui: {
      renderer: (v) => <TauSimpleSelect data={rootStore.vehicleStore.companys} value={v} />,
      itemProps: { required: true },
    },
  },
  type: {
    label: t`商务车1，巴士2`,
  },
  vin: {
    label: t`车架号`,
  },
  landCompany: {
    label: t`大陆公司`,
  },
  hkCompany: {
    label: t`香港公司`,
  },
  vehicleColor: {
    label: t`车辆颜色`,
  },
  engine: {
    label: t`发动机号`,
  },
  firstTime: {
    label: t`首次登记时间`,
    ui: {
      renderer: (v) => <DatePicker style={{ width: '100%' }} value={v} />,
    },
  },
  manufacturer: {
    label: t`生产商`,
  },
  licenseNo: {
    label: t`车辆号牌`,
    mainland: {
      label: t`大陆号牌`,
      ui: {
        itemProps: { required: true },
      },
    },
    hk: {
      label: t`香港号牌`,
      ui: {
        itemProps: { required: true },
      },
    },
  },
  vehicle: {
    label: t`品牌型号`,
    ui: {
      renderer: (v) => <DictItemSelect dictId="vehicle" value={v} />,
      itemProps: { required: true },
    },
  },
  //  1-大巴 2-商务车 3-小客车
  vehicleType: {
    label: t`交管车型`,
    // text: (v) => ENUMS.vehicleType[v],
    ui: {
      renderer: (v) => <DictItemSelect dictId="vehicleType" value={v} />,
    },
  },
  numberOfSeats: {
    label: t`座位数`,
  },
  // 出厂日期
  dateOfDelivery: {
    label: t`车龄`,
    text: (v) => (v ? moment(v).fromNow(true) : null),
    ui: {
      renderer: (v) => <DatePicker style={{ width: '100%' }} value={DATETIME_TEXT(v)} />,
    },
  },
  remark: {
    label: t`备注`,
    ui: {
      renderer: (v) => <Input.TextArea value={v} />,
      span: 2,
    },
  },
  // 车辆状态 0-停用（默认）;1-启用，停用时不派单
  status: {
    label: t`启用`,
    ui_table: {
      renderer: (v, i, row) => <Switch checkedChildren="启用" unCheckedChildren="禁用" autoWidth checked={ENUMS.status[v]} size="small" onClick={() => rootStore.vehicleStore.update({ ...row, status: row.status === 1 ? 0 : 1 })} />,
    },
    ui: {
      renderer: (v) => <Switch checkedChildren="启用" unCheckedChildren="禁用" autoWidth checked={v} size="small" />,
    },
  },
  validityDateOfAnnualReview: {
    label: t`年审有效期`,
    ui: {
      renderer: (v) => <DatePicker style={{ width: '100%' }} value={DATETIME_TEXT(v)} />,
    },
  },
  validityDateOfEntryExit: {
    label: t`出入境有效期`,
    ui: {
      renderer: (v) => <DatePicker style={{ width: '100%' }} value={DATETIME_TEXT(v)} />,
    },
  },
  permanentLand: {
    label: t`常驻地`,
    ui: {
      renderer: (v) => <DictItemSelect dictId="permanentLand" value={v} />,
      itemProps: { required: true },
    },
  },
  carType: {
    label: t`汽车类型`,
    text: (v) => ENUMS.vehicleType[v],
    ui: {
      renderer: (v) => <TauSimpleSelect data={toSelectDataSource(ENUMS.vehicleType)} value={v} />,
    },
  },
  ports: {
    label: t`出入口岸`,
    ui: {
      renderer: (v) => <DictItemSelect mode="multiple" dictId="port" value={v} />,
      itemProps: { required: true },
    },
  },
  mainDriver: {
    label: t`主司机`,
    ui: {
      renderer: (v) => <TauSimpleSelect showSearch data={rootStore.vehicleStore.drivers} value={v} />,
      itemProps: { required: true },
    },
  },
  coDrivers: {
    label: t`副司机`,
  },
  attachments: [{
    label: t`附件 登记证、行驶证、出入境证件等`,
    title: {
      label: t`附件标题`,
    },
    description: {
      label: t`附件说明`,
    },
    binaryId: [{
      label: t`附件id`,
    }],
  }],
  tude: {
    label: t`经纬度`,
  },
  address: {
    label: t`地址`,
  },
  crBy: {
    label: t`创建者`,
  },
  upBy: {
    label: t`最后修改者`,
  },
  crDate: {
    label: t`创建时间`,
  },
  upDate: {
    label: t`更新时间`,
    text: DATETIME_TEXT,
  },
  tenantId: {
    label: t`租户ID`,
  },
  id: {
    label: '',
  },
};
